package main

import (
	"fmt"
	"log"
	"os"
)

func main() {
	fmt.Println("log模块的基本使用。log.Println/log.Printf/log.Print")
	log.Println("log to stdout.")
	log.Printf("log to %s", "stdout")
	var testArray = [...]byte{0, 1, 2, 3, 4}
	log.Print(testArray)
	log.Println("")
	// log还有Fatal系列（Fatal|Fatalf|Fatalln）、和Panic系列（Panic|Panicf|Panicln）

	// log 设置格式，默认为log.LstdFlags在日志内容前添加日期和时间，等同于（Ldate | Ltime）
	log.SetFlags(log.LstdFlags)
	log.Println("Using log.LstdFlags")
	log.SetFlags(log.LstdFlags | log.Lshortfile)
	log.Println("Using (log.LstdFlags | log.Lshortfile)")
	log.SetFlags(log.LstdFlags | log.Llongfile)
	log.Println("Using (log.LstdFlags | log.Llongfile)")

	// 通常我们需要记录内容到一个文件中，我们查找问题的时候不可能每天盯着上百成千台服务器看标准输出。
	// func init()
	{
		log.SetFlags(log.LstdFlags)
		logFile, err := os.OpenFile("logs.txt", os.O_CREATE|os.O_APPEND|os.O_APPEND, 0644)
		if err != nil {
			fmt.Println("打开日志文件失败了:", err.Error())
		} else {
			log.SetOutput(logFile)
			log.Println("使用默认log对象，设置了日志")
			logFile.Close()
		}
	}

	// 也可以不使用默认的log，而是用log.New方法
	{
		logFile, err := os.OpenFile("NewLogs.txt", os.O_CREATE|os.O_APPEND|os.O_APPEND, 0644)
		if err == nil {
			newLogger := log.New(logFile, "[newlog]", log.LstdFlags|log.Lshortfile)
			newLogger.Println("MyNewLogger!")
			logFile.Close()
		}
	}

	// 标准log库没有实现错误等级比如 ERROR, WARNING, INFO, DEBUG，需要自定义模块（比如logrus）。
	// 这部分以后补充。
}
